/* 
 * File:   treemodel_firewall.hpp
 * Author: ednei
 *
 * Created on 1 de Julho de 2014, 21:04
 */

#ifndef TREEVIEW_FIREWALL_HPP
#define	TREEVIEW_FIREWALL_HPP


#include <biblioteca.h>
#include <banco.h>

/*
 * Define as treemodel que armazena os dados
 * das regras inseridas no servidor
 */
class REGRAS : public Gtk::TreeModel::ColumnRecord {
public:
    REGRAS();
    Gtk::TreeModelColumn<string> linha, tabela, chain, endOrig, endDest, portaOrigem, portaDestino;
    Gtk::TreeModelColumn<string> proto, alvo, opcoes, modulo, Interface;
};

class treeview_firewall : public Gtk::TreeView {
public:

    /* Método construtor que coloca rótulo nas colunas da treeview */
    treeview_firewall();

    REGRAS regras;
    Glib::RefPtr<Gtk::ListStore> pt_firewall;
    Glib::RefPtr<Gtk::TreeModelFilter> treeviewfirewall;
    Gtk::TreeModel::Row row;

    /*
     * Método que retorna as "chave" para encontrar os dados da linha seleciona
     * utilizados na alteração e na exclusão
     * Retorna uma string com a linha, tabela e chain
     */
    string get_regra_selecionada();

    /*
     * Método que busca regras no banco de dados para
     * exibir na treeview
     */
    void get_regras_firewall();

    /*
     * Método que busca as politicas padrão
     * no banco de dados para exibir na treeview
     */
    void get_politica_padrao();

    /*
     * Método que remove dados da treeview e exibe novamente
     * utilizada ao atualizar, inserir ou remover regras.
     */
    void recarregar_regras_firewall();

    /*
     * Método que é acionado para filtrar dados na treeview.
     * tabela Nome da tabela que deve ser mostrado.
     * chain Nome do chain que deve ser mostrado.
     */
    void reordena_tabela_chain(string, string);

private:

    banco *bd;

    string tabela, chain;

    /*
     * Método que verifica se determina linha pode se exibida, "função" de callback
     * iter ponteiro para linha que esta sendo verificada
     * Retorna TRUE a linha pode ser exibida, FALSE caso contrario
     */
    virtual bool order_row_visible(const Gtk::TreeModel::const_iterator& iter);

};


#endif	/* TREEVIEW_FIREWALL_HPP */


